home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / System7 tools / Frontier / Frontier SDK 2.1 / Toolkits / Applet Toolkit / appletmenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-11  |  7.7 KB  |  447 lines  |  [TEXT/KAHL]

  1.  
  2. /*© Copyright 1988-1992 UserLand Software, Inc.  All Rights Reserved.*/
  3.  
  4.  
  5. #include <iac.h>
  6. #include <menusharing.h>
  7. #include "appletinternal.h"
  8. #include "appletops.h"
  9. #include "appletmenuops.h"
  10. #include "appletmenu.h"
  11.  
  12.  
  13.  
  14. MenuHandle hdlapplemenu, hdlfilemenu, hdleditmenu;
  15.  
  16. MenuHandle hdlfontmenu, hdlsizemenu, hdlstylemenu, hdljustifymenu;
  17.  
  18.  
  19. static boolean fontmenuchecker (MenuHandle hmenu, short itemnumber) {
  20.  
  21.     register boolean fl;
  22.     bigstring bs;
  23.     short fontnum;
  24.     
  25.     getmenuitem (hmenu, itemnumber, bs);
  26.     
  27.     GetFNum (bs, &fontnum);
  28.     
  29.     fl = (fontnum == (**app.appwindow).selectioninfo.fontnum);
  30.     
  31.     checkmenuitem (hmenu, itemnumber, fl);
  32.     
  33.     enablemenuitem (hmenu, itemnumber);
  34.         
  35.     return (true);
  36.     } /*fontmenuchecker*/
  37.     
  38.     
  39. static boolean sizemenuchecker (MenuHandle hmenu, short itemnumber) {
  40.     
  41.     register short checkeditem;
  42.     register short fontsize;
  43.     register short itemsize;
  44.     register short style;
  45.     register short fontnum;
  46.     
  47.     fontsize = (**app.appwindow).selectioninfo.fontsize;
  48.     
  49.     switch (fontsize) {
  50.         
  51.         case -1: /*no consistent size across selection*/
  52.             checkmenuitem (hmenu, itemnumber, false);
  53.             
  54.             goto L1; /*skip to determining if it's a real font or not*/
  55.         
  56.         case 9:
  57.             checkeditem = point9item;
  58.             
  59.             break;
  60.             
  61.         case 10:
  62.             checkeditem = point10item;
  63.             
  64.             break;
  65.             
  66.         case 12:
  67.             checkeditem = point12item;
  68.             
  69.             break;
  70.             
  71.         case 14:
  72.             checkeditem = point14item;
  73.             
  74.             break;
  75.             
  76.         case 18:
  77.             checkeditem = point18item;
  78.             
  79.             break;
  80.             
  81.         case 24:
  82.             checkeditem = point24item;
  83.             
  84.             break;
  85.             
  86.         case 36:
  87.             checkeditem = point36item;
  88.             
  89.             break;
  90.             
  91.         case 48:
  92.             checkeditem = point48item;
  93.             
  94.             break;
  95.             
  96.         case 72:
  97.             checkeditem = point72item;
  98.             
  99.             break;
  100.             
  101.         default:
  102.             checkeditem = pointcustomitem;
  103.             
  104.             break;
  105.         } /*switch*/
  106.     
  107.     checkmenuitem (hmenu, itemnumber, itemnumber == checkeditem);
  108.     
  109.     L1:
  110.     
  111.     fontnum = (**app.appwindow).selectioninfo.fontnum;
  112.     
  113.     if (fontnum == -1) { /*no consistent font across selection*/
  114.         
  115.         stylemenuitem (hmenu, itemnumber, 0); /*plain*/
  116.         
  117.         return (true);
  118.         }
  119.     
  120.     itemsize = -1;
  121.     
  122.     switch (itemnumber) {
  123.         
  124.         case point9item:
  125.             itemsize = 9;
  126.             
  127.             break;
  128.             
  129.         case point10item:
  130.             itemsize = 10;
  131.             
  132.             break;
  133.             
  134.         case point12item:
  135.             itemsize = 12;
  136.             
  137.             break;
  138.             
  139.         case point14item:
  140.             itemsize = 14;
  141.             
  142.             break;
  143.             
  144.         case point18item:
  145.             itemsize = 18;
  146.             
  147.             break;
  148.             
  149.         case point24item:
  150.             itemsize = 24;
  151.             
  152.             break;
  153.             
  154.         case point36item:
  155.             itemsize = 36;
  156.             
  157.             break;
  158.             
  159.         case point48item:
  160.             itemsize = 48;
  161.             
  162.             break;
  163.             
  164.         case point72item:
  165.             itemsize = 72;
  166.             
  167.             break;
  168.             
  169.         } /*switch*/
  170.     
  171.     style = 0;
  172.     
  173.     if (itemsize != -1)
  174.         if (RealFont (fontnum, itemsize))
  175.             style = outline;
  176.         
  177.     stylemenuitem (hmenu, itemnumber, style);
  178.         
  179.     return (true);
  180.     } /*sizemenuchecker*/
  181.     
  182.     
  183. static boolean stylemenuchecker (MenuHandle hmenu, short itemnumber) {
  184.     
  185.     register boolean flchecked = false;
  186.     tyselectioninfo x = (**app.appwindow).selectioninfo;
  187.     
  188.     switch (itemnumber) {
  189.         
  190.         case plainitem:
  191.             flchecked = x.flplain;
  192.             
  193.             break;
  194.             
  195.         case bolditem:
  196.             flchecked = x.flbold;
  197.             
  198.             break;
  199.             
  200.         case italicitem:
  201.             flchecked = x.flitalic;
  202.             
  203.             break;
  204.             
  205.         case underlineitem:
  206.             flchecked = x.flunderline;
  207.             
  208.             break;
  209.             
  210.         case outlineitem:
  211.             flchecked = x.floutline;
  212.             
  213.             break;
  214.             
  215.         case shadowitem:
  216.             flchecked = x.flshadow;
  217.             
  218.             break;
  219.  
  220.         } /*switch*/
  221.     
  222.     checkmenuitem (hmenu, itemnumber, flchecked);
  223.     
  224.     return (true);
  225.     } /*stylemenuchecker*/
  226.     
  227.  
  228. static boolean justifymenuchecker (MenuHandle hmenu, short itemnumber) {
  229.     
  230.     register tyjustification justification = (**app.appwindow).selectioninfo.justification;
  231.     register short checkeditem = -1;
  232.     
  233.     switch (justification) {
  234.         
  235.         case leftjustified:
  236.             checkeditem = leftjustifyitem;
  237.             
  238.             break;
  239.             
  240.         case centerjustified:
  241.             checkeditem = centerjustifyitem;
  242.             
  243.             break;
  244.             
  245.         case rightjustified:
  246.             checkeditem = rightjustifyitem;
  247.             
  248.             break;
  249.             
  250.         case fulljustified:
  251.             checkeditem = fulljustifyitem;
  252.             
  253.             break;
  254.             
  255.         case unknownjustification:
  256.             checkmenuitem (hmenu, itemnumber, false);
  257.             
  258.             return (true);
  259.             
  260.         } /*switch*/
  261.     
  262.     checkmenuitem (hmenu, itemnumber, itemnumber == checkeditem);
  263.     
  264.     return (true);
  265.     } /*justifymenuchecker*/
  266.  
  267.  
  268. static checkfontsizestyle (void) {
  269.     
  270.     register hdlappwindow hw = app.appwindow;
  271.     tyselectioninfo x;
  272.     
  273.     if (hw == nil) /*no windows open*/
  274.         return;
  275.     
  276.     x = (**hw).selectioninfo;
  277.     
  278.     if (!x.fldirty) /*nothing to do*/
  279.         return;
  280.     
  281.     (*app.setselectioninfocallback) ();
  282.     
  283.     x = (**hw).selectioninfo; /*get updated flags*/
  284.     
  285.     if (x.flcansetfont)
  286.         visitonemenu (fontmenu, &fontmenuchecker);
  287.     
  288.     if (x.flcansetsize)
  289.         visitonemenu (sizemenu, &sizemenuchecker);
  290.     
  291.     if (x.flcansetstyle)
  292.         visitonemenu (stylemenu, &stylemenuchecker);
  293.         
  294.     if (x.flcansetjust)
  295.         visitonemenu (justifymenu, &justifymenuchecker);
  296.     } /*checkfontsizestyle*/
  297.  
  298.  
  299. void adjustmenus (void) {
  300.     
  301.     register boolean flchanges = false;
  302.     register hdlappwindow ha = app.appwindow;
  303.     register boolean flwindow = ha != nil;
  304.     register MenuHandle hmenu;
  305.     register boolean flsavable = !app.notsaveable;
  306.     tyselectioninfo x;
  307.     
  308.     if (flwindow)
  309.         flchanges = (**ha).flmadechanges;
  310.     
  311.     hmenu = hdlfilemenu;
  312.     
  313.     if (hmenu != nil) {
  314.     
  315.         setmenuitemenable (hmenu, newitem, flsavable);
  316.         
  317.         setmenuitemenable (hmenu, openitem, flsavable);
  318.         
  319.         setmenuitemenable (hmenu, closeitem, flwindow);
  320.         
  321.         setmenuitemenable (hmenu, saveitem, flchanges && flsavable);
  322.         
  323.         setmenuitemenable (hmenu, saveasitem, flwindow && flsavable);
  324.         
  325.         setmenuitemenable (hmenu, revertitem, flchanges && flsavable && ((**ha).fnum != 0));
  326.         
  327.         enablemenuitem (hmenu, pagesetupitem);
  328.         
  329.         setmenuitemenable (hmenu, printitem, flwindow);
  330.         
  331.         enablemenuitem (hmenu, quititem);
  332.         }
  333.     
  334.     hmenu = hdleditmenu;
  335.     
  336.     if (hmenu != nil) {
  337.     
  338.         if (flwindow) {
  339.              
  340.             checkfontsizestyle ();
  341.             
  342.             x = (**app.appwindow).selectioninfo;
  343.             }
  344.         else
  345.             clearbytes (&x, longsizeof (x)); /*set all flags to 0*/
  346.         
  347.         setmenuitemenable (hmenu, fontitem, x.flcansetfont);
  348.         
  349.         setmenuitemenable (hmenu, sizeitem, x.flcansetsize);
  350.         
  351.         setmenuitemenable (hmenu, styleitem, x.flcansetstyle);
  352.         
  353.         setmenuitemenable (hmenu, justifyitem, x.flcansetjust);
  354.     
  355.         if (x.flcansetsize) {
  356.         
  357.             hmenu = hdlsizemenu;
  358.             
  359.             enablemenuitem (hmenu, point9item);
  360.             
  361.             enablemenuitem (hmenu, point10item);
  362.             
  363.             enablemenuitem (hmenu, point12item);
  364.             
  365.             enablemenuitem (hmenu, point14item);
  366.             
  367.             enablemenuitem (hmenu, point18item);
  368.             
  369.             enablemenuitem (hmenu, point24item);
  370.             
  371.             enablemenuitem (hmenu, point36item);
  372.             
  373.             enablemenuitem (hmenu, point48item);
  374.             
  375.             enablemenuitem (hmenu, point72item);
  376.             
  377.             /*
  378.             enablemenuitem (hmenu, pointupitem);
  379.             
  380.             enablemenuitem (hmenu, pointdownitem);
  381.             */
  382.             
  383.             enablemenuitem (hmenu, pointcustomitem);
  384.             }
  385.         
  386.         if (x.flcansetstyle) {
  387.     
  388.             hmenu = hdlstylemenu;
  389.             
  390.             enablemenuitem (hmenu, plainitem);
  391.             
  392.             enablemenuitem (hmenu, bolditem);
  393.             
  394.             enablemenuitem (hmenu, italicitem);
  395.             
  396.             enablemenuitem (hmenu, underlineitem);
  397.             
  398.             enablemenuitem (hmenu, outlineitem);
  399.             
  400.             enablemenuitem (hmenu, shadowitem);
  401.             }
  402.             
  403.         if (x.flcansetjust) {
  404.         
  405.             hmenu = hdljustifymenu;
  406.             
  407.             enablemenuitem (hmenu, leftjustifyitem);
  408.         
  409.             enablemenuitem (hmenu, centerjustifyitem);
  410.         
  411.             enablemenuitem (hmenu, rightjustifyitem);
  412.         
  413.             enablemenuitem (hmenu, fulljustifyitem);
  414.             }
  415.         }
  416.     } /*adjustmenus*/
  417.  
  418.  
  419. void initmenus (void) {
  420.  
  421.     installmenu (applemenu, &hdlapplemenu);
  422.     
  423.     if (hdlapplemenu != nil)
  424.         AddResMenu (hdlapplemenu, 'DRVR');
  425.     
  426.     installmenu (filemenu, &hdlfilemenu);
  427.     
  428.     installmenu (editmenu, &hdleditmenu);
  429.     
  430.     (*app.insertmenucallback) ();
  431.     
  432.     installhierarchicmenu (fontmenu, &hdlfontmenu);
  433.     
  434.     if (hdlfontmenu != nil)
  435.         AddResMenu (hdlfontmenu, 'FONT');
  436.     
  437.     installhierarchicmenu (sizemenu, &hdlsizemenu);
  438.     
  439.     installhierarchicmenu (stylemenu, &hdlstylemenu);
  440.     
  441.     installhierarchicmenu (justifymenu, &hdljustifymenu);
  442.     
  443.     DrawMenuBar ();
  444.     } /*initmenus*/
  445.  
  446.  
  447.